package com.mac.service;

import com.mac.mapper.CollaborationsMapper;
import com.mac.pojo.Collaborations;
import com.mac.util.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;

/**
 * 提供合作信息相关业务操作的服务类。
 * 该类实现了CollaborationsMapper接口，用于执行与合作信息相关的数据库操作。
 */
@SuppressWarnings({"all"})
public class CollaborationsService implements CollaborationsMapper {
    // 使用SLF4J记录日志
    private static final Logger LOGGER = LoggerFactory.getLogger("CollaborationsService.Class");

    // SqlSessionFactory工厂，用于创建SqlSession对象
    SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();

    /**
     * 获取所有合作信息的方法。
     * @return 返回包含所有合作信息的ArrayList集合。
     */
    @Override
    public ArrayList<Collaborations> selectAllCollaborations() {
        // 通过工厂创建SqlSession对象
        SqlSession sqlSession = factory.openSession();

        // 获取合作信息映射器
        CollaborationsMapper collaborationsMapper = sqlSession.getMapper(CollaborationsMapper.class);

        ArrayList<Collaborations> collaborations;
        try {
            // 调用映射器的方法，获取所有合作信息
            collaborations = collaborationsMapper.selectAllCollaborations();
            // 关闭SqlSession
            sqlSession.close();
            // 记录操作成功的日志
            LOGGER.info("selectAllCollaborations() -> succeed", collaborations);
            return collaborations;
        } catch (Exception e) {
            // 发生异常时关闭SqlSession
            sqlSession.close();
            // 记录操作失败的日志
            LOGGER.error("selectAllCollaborations() -> failed", e);
            return null;
        }
    }

    /**
     * 根据合作信息ID获取单个合作信息的方法。
     * @param collaborationId 合作信息ID。
     * @return 返回包含单个合作信息的对象。
     */
    @Override
    public Collaborations selectOneBycollaborationId(int collaborationId) {
        // 通过工厂创建SqlSession对象
        SqlSession sqlSession = factory.openSession();
        // 获取合作信息映射器
        CollaborationsMapper collaborationsMapper = sqlSession.getMapper(CollaborationsMapper.class);
        Collaborations collaborations;

        try {
            // 调用映射器的方法，根据ID获取单个合作信息
            collaborations = collaborationsMapper.selectOneBycollaborationId(collaborationId);
            // 关闭SqlSession
            sqlSession.close();
            // 记录操作成功的日志
            LOGGER.info("selectOneBycollaborationId() -> succeed", collaborations);
            return collaborations;
        } catch (Exception e) {
            // 发生异常时关闭SqlSession
            sqlSession.close();
            // 记录操作失败的日志
            LOGGER.error("selectOneBycollaborationId()  -> failed", e);
            return null;
        }
    }
}